昨天講了一些基本型別,今天我們來談談變數。不過說起 Kotlin 變數,雖然生於 Java,但在變數這塊的設計可說是相當不同,基本上 Kotlin 裡面的變數可以根據修改限制分類為 val
, var
,當然也可以根據不同的作用域分為 local
, top-level
, Member (properties)
, Companion object
,後面這些咒語我們之後再來補。
這裡我們先根據修改的限制分別介紹 Immutable object (不可變物件) & Mutable object (可變物件)。
在物件導向及函數程式語言中,不可變物件(英語:Immutable object)是一種物件,在被創造之後,它的狀態(成員變數、屬性等的值)就不可以被改變,當然它就具備執行緒安全的特性。 — Wiki-zh
val
: 執行階段 (runtime) 不可變 (immutable) 的變數宣告,可用於指向程式中的物件,指派後不可再被修改,須符合不可變物件的性質。
val a = 10
val b: Int = 6 // 指定 b 變數為 Int 型別
val c: Int = 3.2 // 錯誤: 我們無法在 Int 型別下賦予它浮點數
b = 7 // 錯誤: 我們無法對 val 進行重新賦值
const
: 編譯階段 (compile-time) 不可變 (immutable) 的變數宣告,呼叫到的程式碼在被編譯 (compile) 階段就被 Kotlin compiler 替換成在程式碼中被賦予的值,對於執行效率上會比 val 更高。
合法使用方法 (會在程式碼被轉換為位元組碼 (Bytecode) 時取代呼叫處:
const val MAX_VALUE = 100
const val PI = 3.14159
非合法使用方法:
const val currentYear = Calendar.getInstance().get(Calendar.YEAR)
const val RESULT = someFunction() + 42
// 錯誤: 使用執行階段生成的物件作為賦值來源
var
: 可變 (mutable) 的變數宣告,可用於指向程式中的物件,指派後它身上的值是可以被修改的。
var b = 10
var b: Int = 6 // 指定 b 變數為 Int 型別